科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用.Net Remoting技术实现定向广播

用.Net Remoting技术实现定向广播

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

相对于 WebService 来说,采用 .Net Remoting 技术的客户端能够订阅服务器端事件,这个功能简直太棒了。

作者:佚名 来源:论坛整理 2007年11月17日

关键字: 定向广播

  • 评论
  • 分享微博
  • 分享邮件
 相对于 WebService 来说,采用 .Net Remoting  技术的客户端能够订阅服务器端事件,这个功能简直太棒了。

  如果想利用该技术作一个简单而又典型的应用,信息广播程序是一个不错的选择。以下代码是一个简单的广播程序,当然,它实在太简陋了。

  服务端:

以下是引用片段:
  Code
  class Program
  {
  static void Main(string[] args)
  {
  BinaryServerFormatterSinkProvider sfsp = new BinaryServerFormatterSinkProvider();
  sfsp.TypeFilterLevel = TypeFilterLevel.Full;
  Hashtable props = new Hashtable();
  props["port"] = 8086;
  TcpChannel channel = new TcpChannel(props, null, sfsp);
  ChannelServices.RegisterChannel(channel, false);
  SayHello sayHello = new SayHello();
  RemotingServices.Marshal(sayHello, "SayHello");
  Console.ReadKey();
  sayHello.Say("Mike", "Hello, Mike");
  Console.ReadKey();
  sayHello.Say("John", "Hello, John");
  Console.ReadKey();
  }
  }

  客户端:

以下是引用片段:
Code
  class Program
  {
  static void Main(string[] args)
  {
  BinaryServerFormatterSinkProvider sfsp = new BinaryServerFormatterSinkProvider();
  sfsp.TypeFilterLevel = TypeFilterLevel.Full;
  Hashtable props = new Hashtable();
  props["port"] = 0;
  TcpChannel channel = new TcpChannel(props, null, sfsp);
  ChannelServices.RegisterChannel(channel, false);
  SayHello sh = (SayHello)Activator.GetObject(typeof(SayHello), "tcp://localhost:8086/SayHello");
  SayEventReappear re = new SayEventReappear();
  re.ClientId = "John";
  sh.OnSay += new SayHandler(re.Say);
  re.OnSay += new SayHandler(re_OnSay);
  Console.ReadKey();
  }
  static void re_OnSay(string text)
  {
  Console.WriteLine(text);
  }
  }

  远程对象、委托及事件重现器(需同时部署在服务端及客户端):

以下是引用片段:
Code
  public class SayHello : MarshalByRefObject
  {
  public event SayHandler OnSay;
  public void Say(string clientId, string text)
  {
  if (this.OnSay != null) this.OnSay(text);
  }
  }
  public delegate void SayHandler(string text);
  public class SayEventReappear : MarshalByRefObject
  {
  public event SayHandler OnSay;
  public void Say(string text)
  {
  if (this.OnSay != null) this.OnSay(text);
  }
  }

  OK,我的信息广播程序就这样完成了。

  但是,我很快就发现了问题:如果我的确想让所有订阅我的广播事件的客户端都得到我要广播的信息,这个实现应该不会有问题。但是现在我有一个消息只想通知 Mike 或 John (正如以上代码),(注:可能这时不能再称为“广播”了),我的广播程序依然将这个消息通知到了每一个客户端。

    • 评论
    • 分享微博
    • 分享邮件
      闂傚倷绶¢崣搴ㄥ窗閺囩偐鏋庨柕蹇嬪灪婵ジ鏌曡箛瀣偓鏍綖閿燂拷

      濠电姷顣介埀顒€鍟块埀顒€缍婇幃妯诲緞閹邦剛鐣洪梺闈浥堥弲婊勬叏濠婂牊鍋ㄦい鏍ㄧ〒閹藉啴鏌熼悜鈺傛珚鐎规洘宀稿畷鍫曞煛閸屾粍娈搁梻浣筋嚃閸ㄤ即宕㈤弽顐ュС闁挎稑瀚崰鍡樸亜閵堝懎濮┑鈽嗗亝濠㈡ê螞濡ゅ懏鍋傛繛鍡樻尭鐎氬鏌嶈閸撶喎顕i渚婄矗濞撴埃鍋撻柣娑欐崌閺屾稑鈹戦崨顕呮▊缂備焦顨呴惌鍌炵嵁鎼淬劌鐒垫い鎺戝鐎氬銇勯弽銊ф噥缂佽妫濋弻鐔碱敇瑜嶉悘鑼磼鏉堛劎绠為柡灞芥喘閺佹劙宕熼鐘虫緰闂佽崵濮抽梽宥夊垂閽樺)锝夊礋椤栨稑娈滈梺纭呮硾椤洟鍩€椤掆偓閿曪妇妲愰弮鍫濈闁绘劕寮Δ鍛厸闁割偒鍋勯悘锕傛煕鐎n偆澧紒鍌涘笧閹瑰嫰鎼圭憴鍕靛晥闂備礁鎼€氱兘宕归柆宥呯;鐎广儱顦伴崕宥夋煕閺囥劌澧ù鐘趁湁闁挎繂妫楅埢鏇㈡煃瑜滈崜姘跺蓟閵娧勵偨闁绘劕顕埢鏇㈡倵閿濆倹娅囨い蹇涗憾閺屾洟宕遍鐔奉伓

      重磅专题
      往期文章
      最新文章